Skip to main content

什么是伪数组?

是什么

  1. 拥有 length 属性,但是 length 属性不是动态的,不会随着成员的变化而改变
  2. 能像数组一样用 [] 去访问 arguments 的元素
  3. 伪数组是一个 Object,而真实的数组是一个 Array
  4. 不具有数组的 push(), forEach()所具有的方法
var arrLike = {
0: 'a',
1: 'b',
2: 'c',
length: 3
}

arrLike[1] //'a'
arrLike.length //3
arrLike.push('d') //Uncaught TypeError: arrLike.push is not a function

伪数组举例

  • 常见的参数 arguments,
  • DOM 对象列表(比如通过 document.getElementsByTags -得到的列表)
  • jQuery 对象(比如 $("div"))

伪数组转化成真数组的方法

var arrLike = {
0: 'a',
1: 'b',
2: 'c',
length: 3
}

遍历添加入一个空数组

var arr = []

for (var i = 0; i < arrLike.length; i++) {
arr.push(arrLike[i])
}

利用数组的 slice()方法 【推荐】

;[].slice.call(arrLike)

或者

Array.prototype.slice.apply(arrLike)

修改原型指向

arrLike.__proto__ = Array.prototype

Array.from()方法【推荐】

var arr = Array.from(arrLike)